/*
 * @Author: hrg
 * @Date: 2023-05-20 17:57:00
 * @LastEditTime: 2023-05-22 10:11:31
 * @FilePath: \study_go\study05\demo\main\main.go
 * @Description:继承
 */
/*
	-继承：
		通过匿名结构体实现继承
		在golang中 如果一个struct嵌套了另一个匿名结构体，那么这个结构体就可以直接访问匿名结构体中的字段与方法。
	-继承的注意事项：
		继承的结构体的字段和方法不区分大小写
		匿名结构体字段访问可以简化
		当匿名结构体和结构体含有相同字段或方法时，遵循就近原则
*/
package main

import "fmt"

// 定义动物结构体：
type Animal struct {
	Age    int
	Weigth float32
}

// 定义Animal结构体的方法：
func (a *Animal) call() {
	fmt.Println("动物可以叫")
}

// 定义Anlmal的方法：
func (a *Animal) ShowInfo() {
	fmt.Printf("年龄：%v,体重：%v\n", a.Age, a.Weigth)
}

// 定义结构体cat 继承Animal结构体：
type Cat struct {
	Animal
}

// 定义猫的特有的方法：
func (c *Cat) catcall() {
	fmt.Println("cat can miaomiaomiao")
}

func main() {
	// 定义结构体cat的实例对象：
	cat := &Cat{}

	cat.Animal.Age = 4 //等价于cat.Animal.Age = 4
	cat.Weigth = 2.3   //等价于cat.Animal.Weigth = 2.3
	cat.call()
	cat.ShowInfo()
	cat.catcall()
}
